Introduction HA dan Scalability

Overview

  • load balancers adalah server yang meneruskan traffic ke banyak server downstream
    • EC2 instance
  • Mengelola traffic dari user ke banyak server downstream
    • user tidak perlu tahu backend mana yang terhubung dengannya.
    • user hanya perlu terhubung ke ELB

Mengapa LB diperlukan

  • mengelola beban lintas banyak downstream instance
  • User cukup mengekspos satu point of access (DNS) saja ke aplikasi
  • Dapat menangani traffic jika terjadi failure di downstream instance
    • terdapat mekanisme health check
    • traffic akan dirahkan hanya ke instance yang sehat
  • Memiliki fitur SSL termination (HTTPS) pada website
  • Fitur stickyness dengan cookies
    • mengarahkan request dari user yang sama, selalu ke instance yang sama
  • HA lintas AZ
  • Memisahkan public traffic dengan private traffic pada cloud

Mengapa ELB diperlukan

  • ELB -> Elastic Load Balancer
    • load balancer yang dikelola oleh AWS
      • upgrade
      • maintanance
      • HA
    • User hanya perlu beberapa konfigurasi untuk menyesuaikan ELB sesuai kebutuhan
  • dibandingkan dengan mensetup LB sendiri, maintainance lebih mudah menggunakan ELB
  • terintegrasi dengan banyak AWS Service
  • EC2
  • EC2 ASG
  • ECS
  • ACM, CloudWatch
  • Route 53, AWS WAF, AWS Global Accelerator

Health Checks

  • fitur pada ELB untuk memastikan downstream instance berkerja dengan baik
    • jika instance bermasalah, traffic tidak akan dikirim ke instance tersebut
  • Health Check dilakukan pada sebuah port dan sebuah route (biasanya /health)
    • jika response bukan 200 (OK). maka instance dianggap tidak sehat

Jenis Load Balancer pada AWS

  • classic load balancer
    • generasi lama
    • mendukung HTTP, HTTPS, TCP, SSL (Secure TCP)
    • deprecated
  • Application Load Balancer
    • mendukung HTTP, HTTPS dan WebSocket
  • Network Load Balancer
    • mendukung TCP, TLS (Secure TCP), UDP
  • Gateway Load Balancer
    • beroperasi di layer 3 (Network layer) yaitu IP Protocol

Load Balancer Security Group

  • user dapat mengakses LB dari mana saja
    • ELB dapat memiliki security groups
  • downstream instance dapat diatur pada security groupnya, untuk allow traffic dari security group ELB (tidak menggunakan IP range)
    • artinya -> downstream instance hanya mengijinkan traffic jika berasal dari LB

Application Load Balancer

Overview

  • beroperasi pada layer 7 (HTTP)
  • menyeimbangkan beban ke banyak aplikasi berbasis HTTP lintas mesin -> disebut Target Group
  • Dapat juga load balancing ke banyak aplikasi di mesin yang sama -> misalnya container
  • mendukung HTTP/2 dan WebSocket
  • mendukung redirect
    • misal redirect traffic dari HTTP ke HTTPS
  • mendukung routing ke target group yang berbeda
    • routing berdasarkan path URL
      • example.com/user
      • example.com/posts
    • routing berdasarkan hostname
      • one.example.com
      • other.example.com
    • routing berdasarkan query string dan header
      • example.com/users?id=123&order=false
  • ideal untuk aplikasi microservice dan aplikasi berbasis kontainer
    • Docker
    • Amazon ECS
  • Terdapat fitur port mapping untuk redirect ke dynamic port di ECS
    • Pada CLB diperlukan lebih dari 1 CLB per aplikasi

070201-alb-http-based-traffic.drawio.svg

  • request user dapat diarahkan ke target group tertentu berdasarkan routing-nya

Target Group

  • target group dapat berupa :
    • group EC2 instance
      • dapat dikelola oleh Auto Scaling Group
      • protokol HTTP
    • ECS taks
      • dikelola oleh ECS tersebut
      • protokol HTTP
    • Lambda functions
      • HTTP request yang ditranslate ke dalam JSON event
    • IP Address
      • haruslah berupa private ip address
  • ALB dapat me-route ke banyak target group
  • Health Check dilakukan pada level target group

Example

  • ELB memiliki 2 TG
    • TG 1 -> berbasis EC2 instance
    • TG2 -> private IP server on premise
  • routing ke TG1 dan TG2 dapat diarahkan berdasarkan query setring
    • jika request ?platform=mobile -> diarahkan ke TG1
    • jika request ?platform=Desktop-> diarahkan ke TG2

Good to know

  • pada ALB terdapat fixed hostname yang dapat diekspose
    • xxx.region.elb.amazonaws.com
  • application server dibelakang ALB tidak melihat ip client secara langsung
    • ip client disimpan pada extra header X-Forwaded-For
    • untuk port digunakan X-Fowarded-Port
    • untuk proto digunakan X-Forwarded-Proto

Hands On

//todo

Network Load Balancer

Overview

  • beroperasi di layer 4
    • forward TCP dan UDP traffic ke EC2 instance
  • high performance LB
    • menangani jutaan request per detik
exam tips

jika di dalam soal menemui load balancing menggunakan protokol TCP atau UDP, pertimbangkan NLB sebagai jawaban

  • latency yang lebih rendah
    • ~100ms (bandingkan dengan ALB 400ms)
  • NLB memiliki 1 IP static tiap AZ. User dapat assign Elastic IP di tiap AZ
exam tips

Jika menemui kebutuhan aplikasi yang hanya dapat diakses pada 1,2, atau 3 IP yang berbeda. Pertimbangkan NLB sebagai jawaban

  • NLB digunakan untuk keperluan extreme performance dengan protocol TCP/UDP
  • tidak termasuk AWS free tier

Target Group

  • target group di dalam NLB bisa berupa :
    • EC2 instances
    • IP Address (harus merupakan private IP)
    • ALB
    • Health check yang didukung
      • TCP
      • HTTP
      • HTTPS

Gateway Load Balancer

Overview

  • Digunakan untuk deploy, scale dan manage kumpulan network virtual appliance pihak ketiga pada AWS
    • Contoh :
      • Firewall intrusion detection and prevention system
      • Deep Packet inspection system
      • Payload manipulation pada network level

070201-alb-http-based-traffic-GLB.drawio.png

  • Case :
    • misalnya terdapat user yang ingin mengakses aplikasi backend melalui ALB
    • diinginkan semua network traffic diinspeksi terlebih dahulu sebelum dikirim ke aplikasi
      • 3rd party security virtual appliance
    • Untuk keperluan tersebut dipasanglah GLB
    • Behind the scene, route table diupdate di VPC. sehingga semua traffic dari user akan diarahkan ke GLB,
    • selanjutnya traffic tersebut akan diarahkan ke target group yang berupa 3rd party security virtual appliance
      • appliance akan melakukan analyze terhadap traffic
    • jika lolos dari appliance, akan dikembalikan ke GLB
    • GLB akan meneruskan ke aplikasi destination
  • beroperasi pada layer 3 (network level)
    • ip packets
  • GLB menggabungkan 2 fungsi
    - transparent network gateway - single entry/exit for all traffic
    - sebagai load balancer
    - mendistribusikan traffic ke virtual appliance
    Exam Tips

    Jika terdapat soal GENEVE protocol pada port 6081, maka pertimbangkan GLB sebagai jawabn

Target Groups

  • 3rd party virtual appliance
    • EC2 instance
    • IP address (harus berupa ip private)
      • jika menggunakan on-premise atau data center sendiri

Sticky Session

  • stickyness adalah sebuah fitur pada ELB di mana request klien yang sama akan selalu diarahkan oleh ELB ke downstream instance yang sama
  • fitur ini dapat digunakan untuk
    • CLB
    • ALB
    • NLB
  • Cookie yang digunakan untuk stickiness memiliki expiration date yang dapat diatur
  • Use case :
    • dapat digunakan untuk memastikan agar user tidak kehilangan data dari session
  • Enable stickyness akan menyebabkan ketidakseimbangan ke beban di luar backend EC2 instance
  • ada dua jenis cookie
    • Application-based cookie
      • Custom cookie
        • dibuat oleh target (oleh aplikasi dibelakang LB)
        • user dapat menambahkan custom attribute yang diperlukan oleh aplikasi
        • Cookie name haruslah diatur satu persatu untuk setiap target group
        • Jangan menggunakan nama cookie yang direserved oleh ELB
          • AWSELB
          • AWSALBAPP
          • AWSALBTG
      • Application Cookie
        • dibuat oleh load balancer tersebut
        • cookie name : AWSALBAPP
    • Duration-based cookie (LB generated cookie)
      • Cookie yang dibuat oleh LB
      • nama cookie adalah
        • AWSALB untuk ALB
        • AWSELB untuk CLB
      • memiliki expiration time yang digenerate oleh LB

Cross Zone Load Balancing

070201-alb-http-based-traffic-Cross Zone Load Balancer.drawio.png

  • Terdapat 2 AZ masing - masing dideploy ALB
    • AZ 1 -> 2 instance
    • AZ 2 -> 8 instance
  • Client mengirimlan 50% traffic ke AZ 1 dan 50% traffic ke AZ 2
  • Dengan menggunakan Cross Zone Load Balancing
    • ALB akan meredirect traffic ke 10 instance (AZ1 + AZ2) secara sama rata, tidak perduli instance tersebut berasal dari AZ mana
    • sehingga masing - masing instance memperoleh 10% traffic
  • Not have cross Zone Load balancing
    • request dari client akan didistribusikan di setiap instance berdasarkan node dari ALB tersebut
    • AZ 1 mendistribusikan ke 2 instance sehingga masing - masing instance mendapatkan 25% traffic
    • AZ2 mendistribusikan ke 8 instance, sehingga masing - masing mendapatkan 8 instance

Pricing

  • Application Load Balancer
    • by default, enable. Dapat di-disable pada level Target Group
      • always on pada level ALB
    • Tidak ada biaya pada data lintas AZ
  • NLB dan GLB
    • disable, by default
    • terdapat biaya jika di-enable untuk data lintas AZ
  • CLB
    • disable by default
    • tidak ada tagihan biaya untuk data lintas AZ, jika di-enable

SSL Certificates

Basics

  • SSL certificate yang memungkinkan traffic antara client dan LB di-enkripsi in-transit -> disebut inflight encryption
  • SSL merujuk kepada Secure Socket Layer, digunakan untuk enkripsi koneksi
  • TLS (Transport Layer Security) adalah versi terbaru dari SSL
  • public SSL certificate diterbitkan oleh CA
    • Comodo
    • Symantec
    • GoDaddy
    • GlobalSign
    • Digicert
    • Letsencrypt
  • SSL cert memiliki tanggal kadaluarsa, harus diperbarui secara periodik

SSL Certificates

SSL on ELB

  • ALB dengan SSL cert dari ACM
  • user mengakses ALB via HTTPS
  • ALB terhubung ke EC2 instance di dalam ASG menggunakan protokol HTTP

SSL on Web Server EC2 Instance

  • Kebutuhan :
    • NLB
    • User terhubung ke NLB menggunakan TCP
    • NLB terhubung ke EC2 instance di dalam ASG via HTTPS
  • Solusi :
    • buat script pada user data EC2 instance yang bertugas:
      • mendapatkan SSL private key dari SSM Parameter store
      • instal cert di EC2 instance
    • Membutuhkan setup role pada EC2 instance

Conection Draining

  • memiliki dua penamaan
    • CLB : disebut connection draining
    • ALB dan LB : disebut Deregistration Delay
  • Memberikan waktu kepada instance untuk menyeleseikan request yang terlanjut sudah masuk dan diproses ketika instance tersebut di-deregister atau unhealthly
  • ketika sebuah connection di-drained maka ELB akan menghentikan mengirimkan request ke EC2 instance tersebut
  • user dapat mengatur parameter waktu connection draining
    • 1-3600 detik
    • default : 300 detik
    • jika diset 0-> connection draining disable
    • atur waktu ini pada nilai rendah, jika pemrosesan request relatif singkat, jika tidak sesuaikan ke nilai yang lebih tinggi